<?php
/**
 * [LupMisNotAllowedSync]
 * 本代码为系统自动生成代码，请根据自己业务进行修改;
 * 生成时间 2022-02-15 21:16:18;
 * 版权所有 2020-2022 lizhongwen，友情赞助：小白 并保留所有权利;
 * 说明: 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；不允许对程序代码以任何形式任何目的的再发布;
 * 作者: 中文Lee;
 * 作者主页: http://www.lizhongwen.com;
 * 邮箱: 360811363@qq.com;
 * QQ: 360811363;
 */

namespace application\core;

use ReflectionClass;

class BuildMapperDoc
{
    protected $map;
    private static $objArr = [];

    public static function __callStatic($name, $arguments)
    {
        return self::initMap($name, get_called_class(), $arguments);
    }

    public function __call(string $name, array $arguments = [])
    {
        $class_name = get_class($this);
        if (!empty($this->map)) {
            self::$objArr[$class_name] = $this->map;
        }
        return self::initMap($name, $class_name, $arguments);
    }

    private static function initMap($name, string $class_name, array $arguments)
    {
        if (!in_array($class_name, self::$objArr)) {
            $class = new ReflectionClass ("$class_name");
            $doc = $class->getDocComment();
            $tmp = [];
            if (strstr($doc, '@map')) {
                preg_match('/@map(.*?)\n/', $doc, $tmp);
                self::$objArr[$class_name] = trim($tmp[1]) ?? '';
            }
        }
        return Mapper::map(self::$objArr[$class_name], $name)->exec($arguments[0] ?? [], $arguments[1] ?? []);
    }
}